package cn.qicaiwang.open.app.controller;

import cn.qicaiwang.open.common.response.ResponseResult;
import cn.qicaiwang.open.qxyApi.entity.TaxTaskResult;
import cn.qicaiwang.open.qxyApi.server.QxyApiServer;
import cn.qicaiwang.open.qxyApi.server.TaxTaskResultService;
import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.*;

/**
 *首页税务报表
 */
@RestController
@RequestMapping("qcwapp/TaxTask")
public class TaxTaskResultController {
    @Autowired
    private TaxTaskResultService taxTaskResultService;

    /**
     * 模拟数据库存储的年度税务数据
     */
    private static final Map<String, Map<String, Object>> TAX_DATA = new HashMap<>();


    /**
     * 获取报告公司信息
     *
     * @param userId
     * @return 包含完整响应数据的 JSON 字符串列表
     */
    @GetMapping("/getTaxTaskEntityNameInfo")
    public ResponseResult getTaxTaskEntityNameInfo(@RequestParam String userId) {
        try {
            List<TaxTaskResult> responseDataList = taxTaskResultService.getTaxTaskEntityNameInfo(userId);
            // 返回成功的响应结果
            return ResponseResult.ok(responseDataList);
        } catch (Exception e) {
            // 处理异常情况，返回错误响应
            return ResponseResult.error("获取报告公司信息：" + e.getMessage());
        }
    }


    @GetMapping("/getTaxReportDetail")
    public ResponseResult getTaxReportDetail(
            @RequestParam String userId,
            @RequestParam String nsrsbh) {
        try {
            List<TaxTaskResult> reportData = taxTaskResultService.getTaxReportByUserAndNsrsbh(userId, nsrsbh);

            // 如果查询结果为空，返回提示信息
            if (reportData.isEmpty()) {
                return ResponseResult.ok("未找到该公司的税务报告记录");
            }

            // 返回成功的响应结果
            return ResponseResult.ok(reportData);
        } catch (Exception e) {
            // 处理异常情况
            return ResponseResult.error("获取税务报告失败：" + e.getMessage());
        }
    }

    /**
     * 获取公司基本信息
     *
     * @return 包含完整响应数据的 JSON 字符串列表
     */
    @GetMapping("/taxCompanyEnterpriseInfoDtoPageResult")
    public ResponseResult taxCompanyEnterpriseInfoDtoPageResult(@RequestParam String id) {
        try {
            JSONObject responseDataList = taxTaskResultService.taxCompanyEnterpriseInfoDtoPageResult(id);
            // 返回成功的响应结果
            return ResponseResult.ok(responseDataList);
        } catch (Exception e) {
            // 处理异常情况，返回错误响应
            return ResponseResult.error("获取财务报表：" + e.getMessage());
        }
    }

    /**
     * 企业变更信息
     *
     * @return 包含完整响应数据的 JSON 字符串列表
     */
    @GetMapping("/taxCompanyEnterpriseChangeDtoPageResult")
    public ResponseResult taxCompanyEnterpriseChangeDtoPageResult(@RequestParam String id, @RequestParam Integer pageNum, @RequestParam Integer pageSize) {
        JSONObject responseDataList = taxTaskResultService.taxCompanyEnterpriseChangeDtoPageResult(id, pageNum, pageSize);
        return ResponseResult.ok(responseDataList);
    }


    /**
     * 获取纳税信用等级
     *
     * @return 包含完整响应数据的 JSON 字符串列表
     */
    @GetMapping("/taxCompanyCreditLevelDtoPageResult")
    public ResponseResult getTaxTaskInfoByNsrsbh(@RequestParam String id, @RequestParam Integer pageNum, @RequestParam Integer pageSize) {
        JSONObject responseDataList = taxTaskResultService.taxCompanyCreditLevelDtoPageResult(id, pageNum, pageSize);
        return ResponseResult.ok(responseDataList);
    }

    /**
     * 纳税信用等级明细
     *
     * @return 包含完整响应数据的 JSON 字符串列表
     */
    @GetMapping("/taxCompanyCreditLevelDetailList")
    public ResponseResult taxCompanyCreditLevelDetailList(@RequestParam String id, @RequestParam Integer pageNum, @RequestParam Integer pageSize) {
        JSONObject responseDataList = taxTaskResultService.taxCompanyCreditLevelDetailList(id, pageNum, pageSize);
        return ResponseResult.ok(responseDataList);
    }


    /**
     * 企业投资方信息
     *
     * @param
     * @return 包含完整响应数据的 JSON 字符串列表
     */
    @GetMapping("/tzfxxDtoPageResult")
    public ResponseResult tzfxxDtoPageResult(@RequestParam String id, @RequestParam Integer pageNum, @RequestParam Integer pageSize) {
        JSONObject responseDataList = taxTaskResultService.tzfxxDtoPageResult(id, pageNum, pageSize);
        return ResponseResult.ok(responseDataList);
    }

    /**
     * 企业涉税违法违章信息
     *
     * @param
     * @return 包含完整响应数据的 JSON 字符串列表
     */
    @GetMapping("/taxCompanyEnterpriseIllegalDtoPageResult")
    public ResponseResult taxCompanyEnterpriseIllegalDtoPageResult(@RequestParam String id, @RequestParam Integer pageNum, @RequestParam Integer pageSize) {
        JSONObject responseDataList = taxTaskResultService.taxCompanyEnterpriseIllegalDtoPageResult(id, pageNum, pageSize);
        return ResponseResult.ok(responseDataList);
    }
    //backTaxInfo
    /**
     * 欠税信息
     *
     * @return 包含完整响应数据的 JSON 字符串列表
     */
    @GetMapping("/backTaxInfo")
    public ResponseResult backTaxInfo(@RequestParam String id, @RequestParam Integer pageNum, @RequestParam Integer pageSize) {
        JSONObject responseDataList = taxTaskResultService.backTaxInfo(id, pageNum, pageSize);
        return ResponseResult.ok(responseDataList);
    }
    //taxCompanyPaymentListDtoPageResult
    /**
     * 完税证明
     *
     * @param
     * @return 包含完整响应数据的 JSON 字符串列表
     */
    @GetMapping("/taxCompanyPaymentListDtoPageResult")
    public ResponseResult taxCompanyPaymentListDtoPageResult(@RequestParam String id, @RequestParam Integer pageNum, @RequestParam Integer pageSize) {
        JSONObject responseDataList = taxTaskResultService.taxCompanyPaymentListDtoPageResult(id, pageNum, pageSize);
        return ResponseResult.ok(responseDataList);
    }

    //paymentInfo
    /**
     * 税款征收信息
     *
     * @param
     * @return 包含完整响应数据的 JSON 字符串列表
     */
    @GetMapping("/paymentInfo")
    public ResponseResult paymentInfo(@RequestParam String id, @RequestParam Integer pageNum, @RequestParam Integer pageSize) {
        JSONObject responseDataList = taxTaskResultService.paymentInfo(id, pageNum, pageSize);
        return ResponseResult.ok(responseDataList);
    }
    //taxFeeIdentify
    /**
     * 税费种认定
     *
     * @return 包含完整响应数据的 JSON 字符串列表
     */
    @GetMapping("/taxFeeIdentify")
    public ResponseResult taxFeeIdentify(@RequestParam String id, @RequestParam Integer pageNum, @RequestParam Integer pageSize) {
        JSONObject responseDataList = taxTaskResultService.taxFeeIdentify(id, pageNum, pageSize);
        return ResponseResult.ok(responseDataList);
    }

    /**
     * 获取客户和供应商基本信息
     *
     * @return 包含客户信息的响应结果
     */
    @GetMapping("/getCustomerAndSupplierInfo")
    public ResponseResult getCustomerAndSupplierInfo(@RequestParam String id) {
        JSONObject customerInfo = taxTaskResultService.getCustomerAndSupplierInfo(id);
        return ResponseResult.ok(customerInfo);
    }

    /**
     * 获取税务基本信息
     *
     * @param year 年份
     * @return 包含税务基本信息的响应结果
     */
    @GetMapping("/getTaxBasicInfo")
    public ResponseResult getTaxBasicInfo(@RequestParam String id, @RequestParam int year) {
        // 调用服务层方法，根据纳税人识别号和年份获取税务基本信息
        JSONObject taxBasicInfo = taxTaskResultService.getTaxBasicInfo(year, id);

        // 返回成功的响应结果
        return ResponseResult.ok(taxBasicInfo);
    }


    /**
     * 获取 财务报表
     *
     * @return 包含财务报表的响应结果
     */
    @GetMapping("/getFinancialReport")
    public ResponseResult getFinancialReport(@RequestParam String id, @RequestParam Integer pageNum, @RequestParam Integer pageSize) {
        try {

            // 调用服务层方法，根据纳税人识别号、年份和期别获取财务报表
            // 如果期别为可选参数，可以在服务层处理默认值或逻辑
            JSONObject financialReport = taxTaskResultService.getFinancialReport(id, pageNum, pageSize);

            // 返回成功的响应结果
            return ResponseResult.ok(financialReport);
        } catch (Exception e) {
            // 处理异常情况，返回错误响应
            return ResponseResult.error("获取财务报表：" + e.getMessage());
        }
    }


    /**
     * 获取 增值税和所得税报表
     *
     * @param pageNum  页码
     * @param pageSize 每页大小
     * @return 包含增值税和所得税报表的响应结果
     */
    @GetMapping("/getTaxRptList")
    public ResponseResult getTaxRptList(
            @RequestParam Integer pageNum,
            @RequestParam Integer pageSize,
            @RequestParam String id

    ) {
        try {
            // 调用服务层方法，根据纳税人识别号、页码和每页大小获取增值税和所得税报表
            // 假设服务层返回一个包含两类报表数据的 JSON 对象
            JSONObject taxRptList = taxTaskResultService.getTaxRptList(id, pageNum, pageSize);

            // 返回成功的响应结果
            return ResponseResult.ok(taxRptList);
        } catch (Exception e) {
            // 处理异常情况，返回错误响应
            return ResponseResult.error("获取增值税和所得税报表失败：" + e.getMessage());
        }
    }

    //企业健康体检报告总结信息
    @GetMapping("/getSummary")
    public ResponseResult getSummary(
            @RequestParam Integer pageNum,
            @RequestParam Integer pageSize,
            @RequestParam String id) {
        try {
            JSONObject taxRptList = taxTaskResultService.getSummary(id, pageNum, pageSize);

            // 返回成功的响应结果
            return ResponseResult.ok(taxRptList);
        } catch (Exception e) {
            // 处理异常情况，返回错误响应
            return ResponseResult.error("获取企业健康体检报告总结信息失败：" + e.getMessage());

        }
    }
}


